package com.yxp.offer;

import java.util.HashSet;
import java.util.Set;

/**
 * @Auther : yxpweb
 * @Date : 2021/8/22 22:00
 * @Description: 剑指 Offer 48. 最长不含重复字符的子字符串
 */
public class Problem48 {
    public static void main(String[] args) {
        Problem48 problem48 = new Problem48();
        System.out.println(problem48.lengthOfLongestSubstring("helloworld"));
    }

//    public int lengthOfLongestSubstring(String s) {
//        if (s == null || s.length() == 0) {
//            return 0;
//        }
//        char[] sChar = s.toCharArray();
//        int dpMax = 0;
//        StringBuilder stringBuilder = new StringBuilder();
//        for (int i = 0; i < sChar.length; i++) {
//            String curString = String.valueOf(sChar[i]);
//            int curStringIndex = stringBuilder.indexOf(curString);
//            if (curStringIndex != -1) {
//                stringBuilder.delete(0, curStringIndex + 1);
//            }
//            stringBuilder.append(curString);
//            dpMax = Math.max(dpMax, stringBuilder.length());
//        }
//        return dpMax;
//    }

    /**
     * 这里运行的太慢了。会有更好的方法。
     * @param s
     * @return
     */
    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int dpMax = 0;
        String stringBuilder = "";
        for (int i = 0; i < s.length(); i++) {
            String curString = s.substring(i, i + 1);
            int curStringIndex = stringBuilder.indexOf(curString);
            if (curStringIndex != -1) {
                stringBuilder = stringBuilder.substring(curStringIndex + 1);
            }
            stringBuilder += curString;
            dpMax = Math.max(dpMax, stringBuilder.length());
        }
        return dpMax;
    }
}
